"""
项目简介
图书管理系统
知识模块
Python 编程语言
知识点
类和对象
对象的属性和方法
受众
初级测试开发工程师
初级Python开发工程师
作业要求
编写一个Python程序: - 创建一个图书管理系统，实现以下功能： 1. 图书类 Book：属性包括书名（title）、作者（author）和出版日期（publish_date），方法包括获取书名、获取作者和获取出版日期的方法。 2. 图书馆类 Library：属性包括图书列表（books），方法包括添加图书、借出图书、归还图书和显示所有图书的方法。 3. add_book 方法：接受一个 Book 类型的参数，将其添加到图书列表中。 4. borrow_book 方法：接受一个字符串类型的参数（书名），找到对应书名的图书，并将其从图书列表中移除。 5. return_book 方法：接受一个 Book 类型的参数，将其添加到图书列表中。 6. show_books 方法：输出当前图书馆中所有图书的书名、作者和出版日期。

解题思路
创建一个 Book 类，用于表示图书的信息，包括书名、作者和出版日期等属性。
创建一个 Library 类，用于管理图书，包括添加图书、借出图书、归还图书和展示图书列表等方法。
在 Library 类中，使用一个列表来存储图书列表，初始为空列表。
在 Library 类的 add_book 方法中，将传入的图书对象添加到图书列表中。
在 Library 类的 borrow_book 方法中，遍历图书列表，根据书名找到匹配的图书，并将其从图书列表中移除。如果找到了匹配的图书，则返回该图书对象；否则返回 None。
在 Library 类的 return_book 方法中，将传入的图书对象添加到图书列表中。
在 Library 类的 show_books 方法中，遍历图书列表，逐个打印出图书的书名、作者和出版日期等信息。
测试阶段，创建一个图书馆实例，并添加一些图书到图书馆中。
调用图书馆的方法，如借出图书、归还图书和展示图书列表等，验证逻辑是否正确。

"""

class Book:
    def __init__(self, title, author, publish_date):
        self.title = title
        self.author = author
        self.publish_date = publish_date

    def get_title(self):
        return self.title

    def get_author(self):
        return self.author

    def get_publish_date(self):
        return self.publish_date


class Library:
    def __init__(self):
        self.books = []

    def add_book(self, book):
        """
        添加图书到图书馆的图书列表中
        """
        self.books.append(book)

    def borrow_book(self, title):
        """
        根据书名借出图书，如果找到对应书名的图书，则从图书列表中移除，并返回该图书对象
        """
        for book in self.books:
            if book.get_title() == title:
                self.books.remove(book)
                return book

    def return_book(self, book):
        """
        将归还的图书对象添加到图书列表中
        """
        self.books.append(book)

    def show_books(self):
        """
        显示当前图书馆中所有图书的书名、作者和出版日期
        """
        for book in self.books:
            print("书名：", book.get_title())
            print("作者：", book.get_author())
            print("出版日期：", book.get_publish_date())


# 测试
# 创建一个图书馆实例
library = Library()

# 创建几本图书并添加到图书馆中
book1 = Book("Python编程入门", "张三", "2021-01-01")
book2 = Book("Java编程基础", "李四", "2021-02-01")
book3 = Book("C++高级编程", "王五", "2021-03-01")

library.add_book(book1)
library.add_book(book2)
library.add_book(book3)

# 显示所有图书
library.show_books()

# 借出一本图书并打印出借出的书名
borrowed_book = library.borrow_book("Java编程基础")
if borrowed_book:
    print("借出的书：", borrowed_book.get_title())

# 再次显示所有图书
library.show_books()

# 归还图书并打印出归还的书名
library.return_book(borrowed_book)
print("归还书籍：", borrowed_book.get_title())

# 最后再次显示所有图书
library.show_books()


"""
代码讲解
创建图书馆实例 library。
创建图书对象，并添加到图书馆中。
调用 show_books 方法显示所有图书。
调用 borrow_book 方法借出一本图书，并打印出借出的书名。
再次调用 show_books 方法显示所有图书。
调用 return_book 方法归还之前借出的图书，并打印出归还的书名。
最后再次调用 show_books 方法显示所有图书。
"""